#include <stdio.h>
#include "arrint.h"
#include <assert.h>
#include <time.h>
#include "isort.h"
#include "ssort.h"
int main()
	{
		double comienzo, final;
		double tiempo_ejec;
		arrInt array, array_isort, array_ssort ;
		int ne,i,j,elec=1;

		   printf("Ingrese la longitud del arreglo: "); 
                   scanf("%i",&ne);
                   array = arrInt_create(ne);
		while (elec != 1 || elec != 2){   
                printf("\n*******************************************************************");
     		printf("\n#*****************************************************************#");
     		printf("\n#**************                                       ************#");
     		printf("\n#************** 1-Ingresar el arreglo de forma manual ************#");
		printf("\n#************** 2-Ingresar el arreglo aleatoriamente  ************#");
     		printf("\n#**************                                       ************#");
     		printf("\n#*****************************************************************#");
		printf("\n*******************************************************************\n");
    
		printf("Seleccion: ");
                scanf("%i",&elec);
		switch (elec){
                   
                   case 1 :arrInt_fillStdIn(array);
			   arrInt_showStdOut(array);
		           break;
                   case 2 :arrInt_fillRand(array);
			   arrInt_showStdOut(array);
         		   break;
                  default: printf("\a\a\a       \nIngrese 1 o 2\n");
		      continue;
                           }
			break;
		 }
		while (elec != 5){
                printf("\n*******************************************************************");
     		printf("\n#*****************************************************************#");
     		printf("\n#**************                                       ************#");
     		printf("\n#************** 1-Intercambiar dos indices            ************#");
		printf("\n#************** 2-Reverse arreglo                     ************#");
     		printf("\n#************** 3-Ordenar arreglo (isort)             ************#");
		printf("\n#************** 4-Ordenar arreglo (ssort)             ************#");
		printf("\n#************** 5-Salir y destruir arreglo            ************#");
     		printf("\n#**************                                       ************#");
		printf("\n#*****************************************************************#");
		printf("\n*******************************************************************\n");
    		
		printf("Selección: ");
		scanf("%i",&elec);
		switch (elec){
                   
                   case 1 :printf("\nINTERCAMBIO DE INDICES\n");
			   arrInt_showStdOut(array);
			   printf("\nIngrese los indice a intercambiar:\n");
			   printf("Primer indice: ");
			   scanf("%i",&i); 

			   printf("\nSegundo indice: ");
			   scanf("%i",&j);
		 	   printf("\nArray invertido en %i y %i:\n",i,j);
			   arrInt_swap(array,i,j);
			   arrInt_showStdOut(array);
                      break;

                   case 2 :printf("\nREVERSE ARRAY\n");
		 	   arrInt_showStdOut(array);
			   arrInt_reverse(array);
			   arrInt_showStdOut(array);
		      break;
  		   case 3 :printf("\nORDENAR ARRAY (isort)\n");
			   array_isort=arrInt_clone(array);
			   arrInt_copy(array_isort, array);
			   arrInt_showStdOut(array_isort);
			   comienzo = clock();
			   arrInt_isort(array_isort);
			   arrInt_showStdOut(array_isort);


 			   final = clock();
 			   tiempo_ejec = ((final - comienzo)/1000000);
			   printf("\n********************TIEMPO DE EJECUCION*********************\n\n");
   			   printf( "Segundos Transcurridos: %0.3f\n", tiempo_ejec);
 		   	   printf("\n********************TIEMPO DE EJECUCION*********************\n");
			   arrInt_destroy(array_isort);
                      break;

                   case 4 :printf("\nORDENAR ARRAY (ssort)\n");
			   array_ssort=arrInt_clone(array);
			   arrInt_copy(array_ssort, array);
			   arrInt_showStdOut(array_ssort);
			   comienzo = clock();
			   arrInt_ssort(array_ssort);
			   arrInt_showStdOut(array_ssort);


 			   final = clock();
 			   tiempo_ejec = ((final - comienzo)/1000000);
			   printf("\n********************TIEMPO DE EJECUCION*********************\n\n");
   			   printf( "Segundos Transcurridos: %0.3f\n", tiempo_ejec);
			   printf("\n********************TIEMPO DE EJECUCION*********************\n");
      			   arrInt_destroy(array_ssort);
		      break;

		   case 5 :break;

                  default: printf("Ingrese un valor de 1 a 4 \n");
			break;
                            }
		}		
                arrInt_destroy(array);
		printf("\nArreglo Destruido\n\n");
		return 0;  
		}
